#include <stdbool.h>

// 定义数据部分的结构体
typedef struct
{
    char string[11];
    char num;
} DATA;

// 定义节点部分的结构体
typedef struct node
{
    DATA data;
    struct node *next;
} NODE;

typedef NODE *list;

// 添加一个节点
// *plist：链表的头节点
// data：添加节点的数据
// 返回：0表示添加失败，1表示添加成功
bool list_append(list *plist, DATA data);

// 根据索引读取链表数据
// plist：链表
// index：索引
// 返回：链表对应索引的数据
DATA list_read(list plist, unsigned char index);


// 根据索引弹出链表节点并返回弹出节点的指针
// plist：链表
// index：索引
// 返回：弹出的节点的指针
NODE * list_pop(list *plist,unsigned char index);


// 根据索引删除链表节点
// plist：链表
// index：索引
void list_remove(list *plist, unsigned char index);


// 根据索引修改链表数据
// plist：链表
// index：索引
// data：修改后的数据
void list_modify(list plist, unsigned char index, DATA data);


int list_find(list plist, DATA *data);



// 插入一个节点
// *plist：链表的头节点
// index：插入节点的位置索引
// data：插入节点的数据
// 返回：0表示添加失败，1表示添加成功
bool list_insert(list *plist, unsigned char index, DATA data);

void list_clear(list *plist);


// TODO 可有可无
// 以十六进制的方式打印内存
// *p：欲打印内存指针
// size：打印大小 单位：1字节
void printmem(void *p,unsigned char size);


// TODO 测试用
// 打印链表内容
// plist：链表
void printlist(list plist);

